home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / ms_dos / ml / ml190.doc < prev    next >
Encoding:
Text File  |  1993-07-08  |  26.7 KB  |  816 lines

  1. ムーンライト ver1.90 バージョンアップ箇所の説明
  2.  
  3.                                     1991/12   K.Yoshioka
  4.  
  5.  
  6.  本ドキュメントはML1.80ユーザーのために今回のバージョンアップで変更になった
  7. 箇所だけをピックアップして説明しています。MLの機能でわからない箇所があった
  8. らML.DOCならびにAUTO.DOCを参照してください。
  9.  
  10.  
  11.  
  12.  
  13. ★ X-OFFコード受信時の不都合を改善
  14.  
  15. FMR版MLで、通信パラメータをXフローありで設定した場合、送信できないだけでは
  16. なく他の操作も効かなくなりことがありハングアップと間違えられるケースがあったよう
  17. です。この点は改良しました。ただ、文字化け等でもX-OFFは受かる可能性はあり
  18. ますから、ハングアップと決めつけないで通信パラメータを初期化(具体的にはF8リターン)
  19. してみてください。
  20.  
  21. ★ シフトイン、シフトアウト処理
  22.  
  23. FMR版MLは通信パラメータが7ビット長のときにシフトイン、シフトアウトの処理を行なってい
  24. なかったため、漢字、半角カナが化けて通信できませんでした。7ビット長を選ぶ
  25. と自動的にシフトイン、シフトアウト処理を行なうようにしました。
  26.  
  27. ★ 画面のゴミ
  28.  
  29. FMR版MLで、ESCを押してMLを終了するとMLの画面が残ってしまう、
  30. というバグをなおしました。
  31.  
  32. ★ 日本語FEPとの相性
  33.  
  34. FMR版MLはOAK以外のFEPとはシステム行を取り合う関係で相性が悪い
  35. ようで、今回ATOK6とEGBridgeに関して改善しました(テストでき
  36. るFEPがこれしかなかった)。他のFEPでも改善されているはずです。
  37.  
  38. ★ ローカルループバック
  39.  
  40. ^A,] で通信がループバック状態になります。これはRS-232Cに機器(モデム等)が接続
  41. していない状態でも可能です。この状態から平常に戻るには再度このコマンドを実行
  42. します。
  43. (FMR版がうまくいかなくて98版だけの機能となりました)
  44.  
  45. ★ 逆スクロール
  46.  
  47. 検索の時カーソルがその単語の頭で止まるようにしました。
  48. 範囲指定した箇所をキーボードマクロに登録可能となりました(キーボードマクロは別項参照)
  49.  
  50. ★ コマンドによる強制終了
  51.  
  52. AUTのプログラム上からMLを終了できるようにしました。
  53.  
  54. cmd 0
  55.  
  56. 回線が接続になっていても強制的にDTR信号を落として(MODEMの設定にもよりま
  57. すが、これで回線が切れます)MS-DOSに戻ります。
  58.  
  59.  
  60. ★ フライングXMODEM
  61.  
  62. プロトコルにフライングオプションを設けました。YMODEM-G(BATを含む)以外で有効です。
  63. 元になったフライングXMODEMはNIFTY-ServeのPhinloda氏が考案したもので、MNPモ
  64. デムではエラーが発生しないという特性を利用し従来XMODEMプロトコル内で行っていたエ
  65. ラー検出、再送を省いたものです。これによりMNPとXMODEMの相性の悪さは劇的
  66. に改善されることになります(転送時間の節約になる)。
  67.  
  68. MLのフライングオプションは次の点でオリジナルとは違っています。フライングXMODEMでは積極
  69. 的にエラー検出、再送を省いていますがMLではエラー検出をおこなって万が一に備え
  70. ています。もしエラーが発生すれば再送不可能の状態になりアボートします。MNP
  71. のエラーフリーを盲目的に信じるより一応のチェックはおこなっておくほうが心理的にも良
  72. いであろうという考えです(MNPをうっかり外してしまい、そのまま転送が始
  73. まってしまう場合だってあるかもしれません)。エラー検出をおこなうことによる速
  74. 度低下はありません。
  75.  
  76. フライングオプションが付くことによるプロトコル上の相違は次の通りです。
  77.  
  78. 受信
  79.  
  80. ブロック番号1のヘッダー(SOHもしくはSTX)が送られてきたことを確認し直後にACKを
  81. 送る。さらにブロック全体を受信してエラーチェックをし、それに応じたアクノリッジを返す。
  82. 他のブロックは従来のプロトコルと同じ。
  83.  
  84. 送信
  85.  
  86. ブロック番号1を送った直後にACKが返ってきたものとして処理する。他のブロックは従
  87. 来のプロトコルと同じ。
  88.  
  89.  
  90. ★ キーボードマクロ
  91.  
  92. キーボードマクロ(以後キーマクロ)とは一連のキー入力をマクロとして記憶し、必要な時にその
  93. キーマクロを呼び出すもので、少ないキーストローク数で定形の作業を行うことができます。
  94. 記憶出来る文字数は79文字です。
  95. MLでのキーマクロは次の3種類の操作があります。
  96.  
  97.  マクロ定義開始、終了     ^@(CTRLキーを押しながら@を押す、の意味)
  98.   @マクロのコピー            ^A,@
  99.   キーマクロ呼び出し         ^_(またはF1),@..Z
  100.  
  101. 例:ブレーク信号送信をキーマクロで実現
  102.  
  103. ^@,^A,B[リターン],^@
  104.  
  105. (カンマは見やすくするため便宜上入れているだけで実際は入力しません)
  106. これで次回からはF1,@でブレーク信号が送信できます。またこの@マクロをBキーにコピーす
  107. るには、
  108. ^A,@,B
  109.  
  110. とします。これによりF1,Bでブレーク信号となり、@キーは次のマクロ定義に使えます(新
  111. たなマクロ定義は以前の@マクロを消去します)。
  112.  
  113.  
  114. 例:エディタ(ED)を起動します。
  115.  
  116. ^@,F9,ED[リターン],^@
  117.  
  118. マクロ定義、マクロ実行ともに逆スクロール中でも有効です。
  119. また、キーマクロ用のバッファは27個の文字列変数内に取っています。この変数を操作
  120. することによりAUTのプログラムで簡単に登録、変更、コピー、削除が可能になりま
  121. す。キーマクロは@,A,B,C..の順に連続した変数に割り付けられており、@キーに対応する
  122. 文字列変数の番号は変数%32763が指しています。
  123.  
  124. 注.AUTで登録した後は、その変数を必ずriside属性にしてください。さもな
  125. いとAUT終了時に消えてしまいます。
  126.  
  127. 例:AUTでの登録
  128.  
  129. $[%32763+0] = "mail"    ;@キーに登録
  130. $[%32763+1] = "board"   ;Aキーに登録
  131. $[%32763+2] = "chat"    ;Bキーに登録
  132. $[%32763+3] = ""        ;Cキーに割り付けられたキーマクロを削除
  133. $[%32763+4] = $[%32763] ;@キーをDキーにコピー
  134. reside $[%32763+0]
  135. reside $[%32763+1]
  136. reside $[%32763+2]
  137. reside $[%32763+3]
  138. reside $[%32763+4]
  139.  
  140. また、逆スクロール時に範囲指定した文字列を@キーにマクロとして登録することも可能です。
  141. F1でカーソルで範囲を決めた後@キーを押すことにより登録されます。
  142.  
  143.  
  144. ★ ファンクションキーの入れ替え
  145.  
  146. ML起動時にはMLがファンクションキーを定義して初期化していますが、このキー配列、表
  147. 示が気に入らない場合はファンクションキーテーブルを書き換えることにより入れ替え、表示
  148. 替えが出来ます。このテーブルも文字列変数に取ってあり、AUTプログラムで操作し
  149. ます。テーブルの先頭は変数%32765が指しています。テーブルは以下のような構造にな
  150. っています。
  151.  
  152.   "FK-1"     "FK-2"      "FK-3"    ..   "FK-10"   <-- 登録文字列
  153. $[%32765] $[%32765+1] $[%32765+2]  .. $[%32765+9] <-- 文字列変数
  154.  
  155.                                                       登録するFキー番号
  156.     0          1            2      ..      9      <-- 0はF1を表す
  157. %[%32765] %[%32765+1] %[%32765+2]  .. %[%32765+9] <-- 整数変数
  158.  
  159.     F1         F2           F3            F10     <-- ファンクションキー
  160.  
  161. %[%32765+?]の値は登録するFキーを指しています。ML起動直後には上のように規
  162. 則正しく並んでいます。$[%32765+?]には%[%32765+?]の値のファンクションキー(値が0で
  163. あればF1)に登録する文字列が入っています。
  164.  
  165. 例:F1,F2の機能を入れ替える。
  166.  
  167. %[%32765] = 1
  168. %[%32765+1] = 0
  169.  
  170. これだけではFキーの表示はかわりませんから、次のようにFキーを初期化します。
  171.  
  172. $1 = $[%32765+1]
  173. CMD F 1 "$1"
  174. $1 = $[%32765]
  175. CMD F 2 "$1"
  176.  
  177. 例:F1をユーザーに開放する(ML内部では使用しない)
  178.  
  179. %[%32765] = -1
  180. ;これ以降でユーザー定義した文字列をF1キーに登録する
  181.  
  182. 例:F1をF11(PCー9801の場合SHIFTーF1)に移動する。
  183.  
  184. %[%32765] = 10
  185. $1 = $[%32765]
  186. CMD F 11 "$1"
  187.  
  188.  
  189. ★ 逆スクロール時のファンクションキー入れ替え
  190.  
  191. テーブルの先頭を%32764が指す以外は前項の「ファンクションキーの入れ替え」と同
  192. じです。変数を書き換えた後の初期化は必要ありません(というよりやってはい
  193. けません)。
  194.  
  195. 例.10個のファンクションキーの機能はそのままで番号を入れ替えます。
  196.  
  197. %1 = %32764     ;scrool時のFキーテーブルの格納位置を得る
  198. %[%1+0] = 5     ;従来F1の機能をF6にする
  199. %[%1+1] = 6
  200. %[%1+2] = 7
  201. %[%1+3] = 8
  202. %[%1+4] = 0
  203. %[%1+5] = 4
  204. %[%1+6] = 2
  205. %[%1+7] = 1
  206. %[%1+8] = 3
  207. %[%1+9] = 9
  208.  
  209.  
  210. ★ AUTのプログラミング
  211.  
  212. ◎お願い
  213. 今回のバージョンでML内で使うワークエリアの領域として文字列、整数の両変数を多量に
  214. 使っています(ユーザーが簡単にアクセス出来るように配慮した結果でもありますが)。
  215. ユーザープログラムで使用する変数とのバッティングを避けるため今バージョン以降では変数番
  216. 号30000以降は使用しないようお願いします(ユーザー変数は29999まで)。
  217.  
  218. ◎旧バージョンのAUTを走らせるには
  219. INPUT文がなくなりinput()関数となりました。次の例を参考に書き直してくださ
  220. い。
  221. 例:input $1  ->  $1 = input()
  222.     INPUT %1  ->  %1 = atoi( input() )  ;atoi関数参照の事
  223.  
  224. ◎文字列コピー
  225. 文字列コピーの演算子(=)も式とします。したがって次のように他の演算子と組み合
  226. わせることが可能です。
  227. if(( $1 = strleft( $2, 2 )) == "AB" )
  228.         call AB
  229. endif
  230.  
  231.  
  232. ◎演算子の追加
  233.  
  234. 以下の6種類の演算子を追加しました。
  235.  
  236. ビットごとのXOR   : ^
  237. ビットごとのOR    : |
  238. ビットごとのAND   : &
  239. ビットごとの補数  : ~
  240. 右シフト           : >>
  241. 左シフト           : <<
  242.  
  243. 優先順位、結合規則を次の表に示します。
  244.  
  245. +------+-----+-----+-----+------------------------------------+
  246. |演算子|優先 |結合 |評価 |          説明                      |
  247. |      | 順位| 規則| 順位|                                    |
  248. |------+-----+-----+-----+------------------------------------|
  249. | ,   | 14  | ->  | ->  | 関数呼び出し時の引数をカンマで区切る  |
  250. |------+-----+-----+-----+------------------------------------|
  251. | =   | 13  | <-  |     | 左辺の変数に右辺の値を代入         |
  252. |------+-----+-----|     |------------------------------------|
  253. | ||   | 12  |     |     | 両側のどちらかの値が0以外のとき1 |
  254. |------+-----|     |     |------------------------------------|
  255. | &&   | 11  |     |     | 両側の値が共に0以外の時だけ1     |
  256. |------+-----|     |     |------------------------------------|
  257. | |    | 10  |     |     | ビット毎のOR                         |
  258. |------+-----|     |     |------------------------------------|
  259. | ^    |  9  |     |     | ビット毎のXOR                        |
  260. |------+-----|     |     |------------------------------------|
  261. | &    |  8  |     |     | ビット毎のAND                        |
  262. |------+-----|     |     |------------------------------------|
  263. | ==   |     |     |     | 両側の値の値が等しければ1         |
  264. |------|  7  |     |     |------------------------------------|
  265. | !=   |     |     |     | 両側の値が等しくなければ1         |
  266. |------+-----|     |     |------------------------------------|
  267. | >    |     |     |     | 左側が右側より大きければ1         |
  268. |------|     |     |     |------------------------------------|
  269. | >=   |     |     | ->  | 左側が右側より大きいか等しければ1 |
  270. |------|  6  |     |     |------------------------------------|
  271. | <    |     |     |     | 左側が右側より小さければ1         |
  272. |------|     | ->  |     |------------------------------------|
  273. | <=   |     |     |     | 左側が右側より小さいか等しければ1 |
  274. |------+-----|     |     |------------------------------------|
  275. | >>   |     |     |     | 右シフト                              |
  276. |------|  5  |     |     |------------------------------------|
  277. | <<   |     |     |     | 左シフト                              |
  278. |------+-----|     |     |------------------------------------|
  279. | +    |     |     |     | 足し算                             |
  280. |------|  4  |     |     |------------------------------------|
  281. | -    |     |     |     | 引き算                             |
  282. |------+-----|     |     |------------------------------------|
  283. | *    |     |     |     | 掛け算                             |
  284. |------|     |     |     |------------------------------------|
  285. | /    |  3  |     |     | 割り算                             |
  286. |------|     |     |     |------------------------------------|
  287. | //   |     |     |     | 余り(割り算の後の余り)           |
  288. |------+-----+-----+-----+------------------------------------|
  289. | -    |     |     |     | 直後の値をマイナスにする           |
  290. |------|     |     |     |------------------------------------|
  291. | ~    |  2  | <-  |     | 直後の値をビット毎に反転する         |
  292. |------|     |     |     |------------------------------------|
  293. | !    |     |     |     | 直後の値が0でないなら0、0なら1 |
  294. |------+-----+-----+-----+------------------------------------|
  295. |関数()|  1  |     |     | 引数は左から右へ評価               |
  296. +------+-----+-----+-----+------------------------------------+
  297.  
  298. 注意.>>演算子では符号を保存しません。つまり0b10000000 >> 1 は0b0100000
  299. 0となります。
  300.  
  301.  
  302. ◎表記
  303.  
  304.  if( %1 )
  305.  send"abc"
  306. のような表記を可能としました(ifと括弧がくっついている)。
  307.  
  308.  即値に10進数の他、16進数、2進数が使用可能
  309. %1 = 255                ;10進数
  310. %2 = 0xff               ;16進数
  311. %3 = 0b11111111         ;2進数
  312. 上の場合、%1、%2、%3は同じ値になります。
  313.  
  314. 文字定数が使用可能となりました。
  315. %1 = 'A'                ;%1には0x41が入ります
  316. %2 = '^B'               ;%2には0x02が入ります
  317. %3 = '\r'               ;%3には0x0dが入ります
  318.  
  319.  
  320. ◎関数
  321.  
  322. ファイル操作関数、文字列操作関数等を新たに加えました。従来どうり、関数は単独
  323. には使えません。式(代入式、評価式)の形で使ってください。
  324. 関数名は小文字しか受付けませんので注意してください。
  325.  
  326. status( %1 )            ;関数が単独で使用されているためエラーとなる
  327. %2 = status( %1 )       ;代入式になっているので問題ない
  328. if( status( %1 ) & 1 )  ;評価式になっているので問題ない
  329.  
  330. 関数の型、引数の型、引数の数は実行前に厳密にチェックされます。関数に渡す引数
  331. は式の形になっていてもかまいません。
  332.  
  333. $1 = strleft( $1, strlen( $1 ) - 1 )
  334.  
  335. 複数の引数がある関数は左の引数から評価されます。
  336.  
  337. %1 = 1
  338. %2 = func( %1 = %1 + 1, %1 )    ;func()は架空の関数
  339.  
  340. これは次の式と同等です。
  341.  
  342. %2 = func( 2, 2 )
  343.  
  344. 以下で追加になった関数を説明しますが、引数の型とリターンの型は<>で示します。
  345. intは整数型、str文字列型変数です。関数を使った総合例はAUTO.DOCに
  346. 載せてあります。
  347.  
  348.  
  349. <入出力関数>
  350.  
  351. 書式:ret = input()
  352.       ret       :<str>入力文字列
  353. 機能:改行の直前までの入力文字列を返す(改行文字は捨てられる)。最大入力
  354. 文字数は40文字で入力文字は画面に表示される。
  355. 例 :$1 = input()
  356.  
  357.  
  358. 書式:ret = putch( c )
  359.       c         :<int>出力文字
  360.       ret       :<int>常に0
  361. 機能:画面に1文字書く。
  362. 例 :%1 = putch('A')
  363.  
  364.  
  365. <文字列操作関数>
  366.  
  367. 書式:ret = space( len )
  368.       len       :<int>確保するサイズ
  369.       ret       :<str>確保した文字列。確保失敗時は""
  370. 機能:len長の連続したメモリを確保し、スペース(0x20)で埋める。
  371. 例 :$1 = space( 10 )
  372.  
  373.  
  374. 書式:ret = rchar( strval, offset )
  375.       strval    :<str>文字列変数
  376.       offset    :<int>取り出す位置
  377.       ret       :<int>文字コード、失敗時(-1)
  378. 機能:strvalで指定された文字列型変数の先頭からoffset位置の文字を取り出す。
  379. offsetが領域を超えると読みだしは拒否され-1が返る。
  380. 例 :文字列の長さを計算する(同等の機能を持った関数strlen()も用意されて
  381. います)
  382.         $1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  383.         %1 = 0                                  ;文字数カウント
  384.         while( rchar( $1, %1 ) > 0 )            ;文字列の終端は0
  385.                 %1 = %1 + 1
  386.         endwhile
  387.         echo "文字列長=%1\r"
  388.  
  389.  
  390. 書式:ret = wchar( strval, offset, c )
  391.       strval    :<str>文字列変数
  392.       offset    :<int>書き込む位置
  393.       c         :<int>書き込む文字
  394.       ret       :<int>書き込み成功(0)、失敗時(-1)
  395. 機能:文字列変数内のオブジェクトの先頭からoffset位置にcを書き込む。offse
  396. tが領域を超えると書き込みは拒否され-1が返る。したがってstrvalは(offset+1)
  397. 以上の領域を持っているか、または時前に確保しておかなければいけません。
  398. 例 :用意した領域をABC..Zの順に埋める
  399.         $1 = space( 27 )                ;あらかじめ領域を確保
  400.         %1 = 0
  401.         %2 = 'A'
  402.         while( wchar( $1, %1, %2 ) != -1 )
  403.                 %1 = %1 + 1
  404.                 %2 = %2 + 1
  405.         endwhile
  406.         %10 = wchar( $1, %1, 0 )        ;文字列の終端はゼロ
  407.         echo "$1\r"
  408.  
  409. 注意:文字列の終端はゼロ(0x00)です。"ABC"の内部表現は0x41,0x42,0x43,0x
  410. 00です。
  411.  
  412. 書式:ret = atoi( str )
  413.       str       :<str>変換対象の文字列
  414.       ret       :<int>変換結果の数値
  415. 機能:文字列を10進数と解釈し整数に変換する。数字以外の文字があれば変換を
  416. そこで打ち切る。
  417. 例 :%1 = atoi( $1 )
  418.  
  419.  
  420. 書式:ret = itoa( value, radix )
  421.       value     :<int>変換する数値
  422.       radix     :<int>変換の基数
  423.       ret       :<int>変換後の文字列
  424. 機能:valueを基数であるradixにより文字列に変換する。
  425. 例 :$1 = itoa( %1, 10 )       ;%1を10進数の文字列に変換
  426.       $1 = itoa( %1, 16 )       ;%1を16進数の文字列に変換
  427.       $1 = itoa( %1, 2 )        ;%1を2進数の文字列に変換
  428.  
  429.  
  430. 書式:ret = strright( str, n )
  431.       str       :<str>文字列
  432.       n         :<int>取り出す長さ
  433.       ret       :<str>取り出した文字列
  434. 機能:文字列の右側から任意の長さの文字列を取り出す。
  435. 例 :$1 = strright( $2, 3 )
  436.  
  437.  
  438. 書式:ret = strleft( str, n )
  439.       str       :<str>文字列
  440.       n         :<int>取り出す長さ
  441.       ret       :<str>取り出した文字列
  442. 機能:文字列の左側から任意の長さの文字列を取り出す。
  443. 例 :$1 = strleft( $2, 3 )
  444.  
  445.  
  446. 書式:ret = strmid( str, n1, n2)
  447.       str       :<str>文字列
  448.       n1        :<int>取り出す箇所
  449.       n2        :<int>取り出す長さ
  450.       ret       :<str>取り出した文字列
  451. 機能:文字列のn1の箇所からn2の長さの文字列を取り出す。
  452. 例 :$1 = strmid( $2, 2, 4 )
  453.  
  454.  
  455. 書式:ret = strupr( str )
  456.       str       :<str>文字列
  457.       ret       :<str>変換した文字列
  458. 機能:文字列に含まれるすべての小文字を大文字へ変換する。
  459. 例 :$1 = strupr( $2 )
  460.  
  461.  
  462. 書式:ret = strlwr( str )
  463.       str       :<str>文字列
  464.       ret       :<str>変換した文字列
  465. 機能:文字列に含まれるすべての大文字を小文字へ変換する。
  466. 例 :$1 = strlwr( $2 )
  467.  
  468.  
  469. 書式:ret = strpri( str )
  470.       str       :<str>文字列
  471.       ret       :<str>変換した文字列
  472. 機能:文字列を""でくくった形に変換する。これでコントロールキャラクタも画面表示可能に
  473. なります。
  474. 例 :$1 = strpri( $2 )
  475.  
  476.  
  477. 書式:ret = strirp( str )
  478.       str       :<str>文字列
  479.       ret       :<str>変換した文字列
  480. 機能:""でくくられた形の文字列を""なしに変換する(strpri()の逆)。
  481. 例 :$1 = strirp( $2 )
  482.  
  483.  
  484. 書式:ret = strstr( str1, str2 )
  485.       str1      :<str>検索対称文字列
  486.       str2      :<str>検索文字列
  487.       ret       :<int>str1上でのstr2の出現位置
  488. 機能:文字列str1の中で文字列str2が出現した位置を返す(先頭であれば0)。発
  489. 見できなかった時はー1を返す。
  490. 例 :%1 = strstr( $1, $2 )
  491.  
  492.  
  493. 書式:ret = strint( int )
  494.       int       :<int>キャラクタコード(0から255)
  495.       ret       :<str>指定したキャラクタコードの文字列
  496. 機能:指定したキャラクタコードの文字列を返す。
  497. 例 :$1 = strint( %1 )
  498. 参考:例の1行をwchar()を使って書き直すと次のようになります。
  499.       $1 = space( 1 )
  500.       %2 = wchar( $1, 0, %1 )
  501.  
  502.  
  503. 書式:ret = getenv( str )
  504.       str       :<str>環境変数
  505.       ret       :<str>環境変数の値(文字列)
  506. 機能:strで示された環境変数を検索し、見つかればその文字列を返し、見つから
  507. なければ""を返す。
  508. 例 :$2 = getenv( $1 )
  509.  
  510.  
  511. 書式:ret = strlen( str )
  512.       str       :<str>文字列
  513.       ret       :<int>総文字数
  514. 機能:文字列の総文字数を返す。
  515. 例 :%1 = strlen( $1 )
  516.  
  517.  
  518. <文字変換関数>
  519.  
  520. 書式:ret = toupper( c )
  521.       c         :<int>文字コード
  522.       ret       :<int>変換した文字コード
  523. 機能:cで与えられた文字が小文字であれば大文字に変換する。
  524. 例 :%1 = toupper( 'a' )
  525.  
  526.  
  527. 書式:ret = tolower( c )
  528.       c         :<int>文字コード
  529.       ret       :<int>変換した文字コード
  530. 機能:cで与えられた文字が大文字であれば小文字に変換する。
  531. 例 :%1 = tolower( 'A' )
  532.  
  533.  
  534. <文字種判定関数>
  535.  
  536. 書式:ret = isalpha( c )
  537.       c         :<int>文字コード
  538.       ret       :<int>結果
  539. 機能:cで与えられた文字がアルファベットであれば1、そうでなければ0を返す。
  540. 例 :%1 = isalpha( %2 )
  541.  
  542.  
  543. 書式:ret = isupper( c )
  544.       c         :<int>文字コード
  545.       ret       :<int>結果
  546. 機能:cで与えられた文字が大文字であれば1、そうでなければ0を返す。
  547. 例 :%1 = isupper( %2 )
  548.  
  549.  
  550. 書式:ret = islower( c )
  551.       c         :<int>文字コード
  552.       ret       :<int>結果
  553. 機能:cで与えられた文字が小文字であれば1、そうでなければ0を返す。
  554. 例 :%1 = islower( %2 )
  555.  
  556.  
  557. 書式:ret = isdigit( c )
  558.       c         :<int>文字コード
  559.       ret       :<int>結果
  560. 機能:cで与えられた文字が数字であれば1、そうでなければ0を返す。
  561. 例 :%1 = isdigit( %2 )
  562.  
  563.  
  564. 書式:ret = isspace( c )
  565.       c         :<int>文字コード
  566.       ret       :<int>結果
  567. 機能:cで与えられた文字がスペース、タブ、CR、LFのいずれかであれば1、そうでな
  568. ければ0を返す。
  569. 例 :%1 = isspace( %2 )
  570.  
  571.  
  572. 書式:ret = iskanji( c )
  573.       c         :<int>文字コード
  574.       ret       :<int>結果
  575. 機能:cで与えられた文字が漢字1バイト目(0x81~0x9fまたは0xe0~0xfc)に該当
  576. すれば1、そうでなければ0を返す。
  577. 例 :%1 = iskanji( %2 )
  578.  
  579.  
  580. 書式:ret = iskanji2( c )
  581.       c         :<int>文字コード
  582.       ret       :<int>結果
  583. 機能:cで与えられた文字が漢字2バイト目(0x40~0x7eまたは0x80~0xfc)に該当
  584. すれば1、そうでなければ0を返す。
  585. 例 :%1 = iskanji2( %2 )
  586.  
  587.  
  588. <ファイル操作関数>
  589.  
  590. 書式:ret = fopen( fname, mode )
  591.       fname     :<str>ファイル名
  592.       mode      :<str>アクセス形式
  593.       ret       :<int>オープンしたファイルへのアクセスキー
  594. 機能:fnameのファイルをmodeでオープンし、アクセスキーを返す。以後の読み書きはこのアクセス
  595. キーにより行う。オープンが失敗したときは0が返る。
  596. modeはアクセス形式を表す以下のいずれかの文字列を指定すること。
  597.  
  598. "r"     :読みだし可。ファイルが存在しなければエラーとする。
  599. "w"     :書き込み可。ファイルが存在するときは上書きする。
  600. "a"     :追加書き込み可。ファイルが存在しなければ新たに作る。
  601. "r+"    :読み出し/書き込み可。ファイルが存在しなければエラー。
  602. "w+"    :読み出し/書き込み可。ファイルが存在上書き。
  603. "a+"    :読み出し/書き込み可。ファイルが存在しなければ新たに作る。
  604.  
  605. 例:if(( %1 = fopen( "ML.DEF", "r" )) == 0 )
  606.         echo "open error!\r"
  607.         end
  608.     endif
  609.  
  610.  
  611. 書式:ret = fclose( key )
  612.       key       :<int>ファイルアクセスキー
  613.       ret       :<int>正常にクローズできれば0。エラーが発生したときはー1
  614. 機能:ファイルをクローズする。
  615. 例 :%2 = fclose( %1 )
  616.  
  617.  
  618. 書式:ret = fputc( c, key )
  619.       c         :<int>書き込む文字
  620.       key       :<int>ファイルアクセスキー
  621.       ret       :<int>書き込んだ文字。エラーが発生したときはー1
  622. 機能:ファイルに1文字を書き込む。
  623. 例 :if( fputc( 'A', %1 ) == -1 )
  624.         echo "fputc error!!"
  625.       endif
  626.  
  627.  
  628. 書式:ret = fgetc( key )
  629.       key       :<int>ファイルアクセスキー
  630.       ret       :<int>ファイルから読み込んだ文字
  631.                  エラーが発生したとき、ファイルの終わりに達したときはー1
  632. 機能:ファイルから1文字読みだす。
  633. 例 :%2 = fgetc( %1 )
  634.  
  635.  
  636. 書式:ret = fputs( str, key )
  637.       str       :<str>書き込む文字列
  638.       key       :<int>ファイルアクセスキー
  639.       ret       :<int>正常に書き込まれれば0。エラーが発生したときは0以外
  640. 機能:ファイルに文字列を書き込む。
  641. 例 :%2 = fputs( $1, %1 )
  642.  
  643.  
  644. 書式:ret = fgets( buf, n, key )
  645.       buf       :<str>入力した文字列を格納するバッファ
  646.                  文字列変数なければいけません。
  647.       n         :<int>入力する文字数
  648.       key       :<int>ファイルアクセスキー
  649.       ret       :<int>正常に入力できたら0以外
  650.                  エラーが発生したとき、ファイルの終わりに達したときは0
  651. 機能:ファイルから1行読み出すが、1行がn-1文字より長ければn-1文字で切ってbu
  652. fに格納します。bufはあらかじめspace関数等で領域を確保しておかなければいけ
  653. ません(領域が読み出す文字数より小さければエラーとなります)。
  654. 例 :%1 = fgets( $1, 80, %1 )
  655.  
  656. 注意:ファイル上の1行はCR(13)、LF(10)2文字で構成されていますが、fgetc()
  657. とfgets()で入力するとLFコードだけに変換されて入力されます。
  658.  
  659. 参考:fopen(),fclose(),fputc(),fgetc(),fputs(),fgets()の各関数はC言語の
  660. 同名のライブラリ関数を使って実現されています。
  661.  
  662.  
  663. 書式:ret = findfirst( fname )
  664.       fname     :<str>パス名
  665.       ret       :<str>検索結果
  666. 機能:fnameで示されたパス名を検索し、一致したファイルがあればファイル名を、なけれ
  667. ば""を返します(エラーが発生した場合も""となります)。パス名にはワイルドカードが使
  668. 用可能です。
  669. 参考:findfirstと次に説明するfindnextはそれぞれMSーDOSのファンクション4E、4Fを利
  670. 用しています。DTAを変数$32599へ取っているので、ここを調べれば検索結果の詳
  671. 細を得ることが出来ます。
  672. 例 :$1 = findfirst("B:*.AUT")
  673.  
  674.  
  675. 書式:ret = fundnext()
  676.       ret       :<str>検索結果
  677. 機能:先だって実行されたfindfirst()を引継ぎ次に一致するファイルを検索する。
  678. 例 :$1 = findnext()
  679.  
  680.  
  681. <システム状態取得関数>
  682.  
  683. 書式:ret = status( no )
  684.       no        :<int>ステータス番号
  685.       ret       :<int>スステータス
  686. 機能:noで指定したステータスを返す。retはビット毎に意味を持っており、noとretの意
  687. 味は以下のとおり。
  688.  
  689. no      :0      (MLシステム情報)
  690. ret
  691.         bit13-15:マシン( 0:pc-9801 1:FMR )
  692.         bit7-9  :MLメジャーバージョンNo
  693.         bit0-6  :MLマイナーバージョンNo
  694.  
  695. no      :1      (通信パラメータ)
  696. ret
  697.         bit8-15 :speed( 1:300bps 3:1200  4:2400  )
  698.                       ( 5:4800   6:9600  7:19200 )
  699.                       ( 8:38400                  )
  700.         bit6-7  :ストップビット( 1:1ストップビット 2:1.5 3:2 )
  701.         bit4-5  :パリティ( 0:なし 1:奇数 3:偶数 )
  702.         bit2-3  :データビット長( 2:7bit 3:8bit )
  703.         bit1    :CTS/RTSフロー( 0:なし 1:あり )
  704.         bit0    :Xフロー( 0:なし 1:あり )
  705.  
  706. no      :2      (通信状態1)
  707. ret
  708.         bit15   :ローカルループ( 0:していない 1:ローカルループ中 )
  709.         bit11   :アップロード( 0:していない 1:アップロード中 )
  710.         bit10   :ダウンロード( 0:していない 1:ダウンロード中 )
  711.         bit8    :プリント   ( 0:していない 1:プリント中 )
  712.         bit7    :受信文字16進ダンプ( 0:していない 1:ダンプ中 )
  713.         bit6    :送信文字16進ダンプ( 0:していない 1:ダンプ中 )
  714.         bit4    :送信でLFコードを入れるか( 0:入れない 1:入れる )
  715.         bit3    :ローカルエコー( 0:なし 1:あり )
  716.         bit0-2  :漢字コード( 0:シフトJIS 1:NEC 2:旧JIS 3:新JIS )
  717.  
  718. no      :3      (通信状態2)
  719. ret
  720.         bit10   :逆スクロール( 0:していない 1:している )
  721.                 注.逆スクロール中はautは一時停止するのでautから
  722.                   このビットは検出できない
  723.         bit9    :キーボードマクロ実行( 0:していない 1:している )
  724.         bit8    :キーボードマクロ定義( 0:していない 1:している )
  725.         bit5    :画面分割( 0:していない 1:している )
  726.                  (FMRはチャットモード)
  727.         bit0-4  :ウインドウ( 0:開いていない 0以外:ウインドウ行数 )
  728.  
  729. no      :4      (プロトコル)
  730. ret
  731.         bit8    :フライングオプション( 0:なし 1:あり )
  732.         bit0-7  :プロトコル番号
  733.  
  734. 尚、説明のないbitは非公開またはリザーブされています。
  735.  
  736. 例 :%1 = status( 3 )
  737.  
  738. 画面分割中かどうかを調べる
  739. if( status( 3 ) & 0b00100000 )
  740.         echo "画面分割中"
  741. endif
  742.  
  743.  
  744. <コントロールキャラクタテーブル操作関数>
  745.  
  746. 書式:ret = wctbl( tbl, no, c )
  747.       tbl       :<int>テーブル番号( 0:送信 1:受信 2:画面出力 3:キー入力 )
  748.       no        :<int>キャラクタコード格納場所( 0から31(0x1f)まで)
  749.       c         :<int>登録文字( -1から255まで、-1は文字なしと解釈)
  750.       ret       :<int>正常終了(0)、書き込み不可(-1)
  751. 機能:MLはコトロールキャラクタコードを変換するためのテーブルを4個持っています。通信中は
  752. このテーブルにより画面表示等をおこなっています(逆スクロール中など通信に関わりの
  753. 無い場面では無効)。このテーブルを書き換えることによりトリッキーな動作が可能にな
  754. ります。
  755.  
  756. wctbl関数は指定されたテーブル番号のキャラクタコード格納位置に登録された内容を書き換
  757. えます。-1が登録されるとそのコードは無視されます。一度登録されると書き換え
  758. が行われない限り変化しません。
  759.  
  760. 例 :
  761. ESCキーをコマンド起動キーにする
  762. %1 = wctbl( 3, 0x1b, '^A' )
  763.  
  764. CTRL+Sを無効にする(押し間違いを未然に防ぐ)
  765. %1 = wctbl( 3, '^S', -1 )
  766.  
  767. エスケープシーケンスが無効にする(escコードが画面に出力されない)
  768. %1 = wctbl( 2, 0x1b, -1 )
  769.  
  770. send文で発生するベル音を抑止する
  771. (今バージョンからプロトコル終了時にベルが鳴るようにしましたが、これも抑止されま
  772. す)
  773. %1 = wctbl( 2, '^G', -1 )
  774.  
  775. LFコードが入ってきたらCRコードに変換します。MLはCR受信を契機に改行します、
  776. ホストによってはCR+LF+LFで2行の改行を期待する場合があります。こういう時に有
  777. 効です。
  778. %1 = wctbl( 1, '\n', '\r' )
  779. %1 = wctbl( 1, '\r', ー1 )
  780.  
  781. %1 = wctbl( 0, '^C', '^X' )
  782. CTRL+CをCTRL+Xに替えて送信します。ホストによってキャンセルコードがいろいろで、うっ
  783. かり押し間違えることもあります。ホスト毎にキーテーブルを持つことにより操作を統一
  784. することができます。
  785.  
  786. 注意:キーテーブルに用意にアクセスできますが、書き換えることにより支障をきたすキーも
  787. あります(例えばキー入力でCTRL+Aを無効化すればコマンド入力ができなくなる)ので
  788. 注意してください。
  789.  
  790.  
  791. 書式:ret = rctbl( tbl, no )
  792.       tbl       :<int>テーブル番号( 0:送信 1:受信 2:画面出力 3:キー入力 )
  793.       no        :<int>キャラクタコード格納位置(0x1f)まで)
  794.       ret       :<int>登録されていた文字コード
  795. 機能:指定したテーブル番号のキャラクタコード格納位置に登録されている文字コードを得る。
  796.  
  797. 例 :%1 = rctbl( 0, '^B' )
  798.  
  799.  
  800. ★ その他
  801.  
  802. ユーザーの皆さんから寄せられた要望は今バージョンでかなり達成したと自負しており
  803. ます。とは言っても、うっかり忘れがあるかもしれませんし、使い込んでいけば
  804. 不備な点もでてくると思います。そのときは気軽に要望してください。あと使用
  805. 感など報告して下されば作者として次期バージョンへの参考になると思います。
  806.  
  807. 今回のバージョンアップに関してユーザーの皆様から御助言いただきました。
  808. 特にシーガルネットのソフトSIGの皆さんにはβバージョンをTEST使用し
  809. ていただきました。
  810. 富士通八戸支店の中山さんにはFMR版の動作確認で便宜を計っていただきまし
  811. た。
  812. 富士通のTAKAさんにはBIOSの質問等でお世話になりました。
  813.  
  814. この場を借りてお礼申し上げます。
  815.